﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>读注册表 - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The 读注册表 function reads a value from the registry." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>读注册表</h1>

<p>从注册表读取值.</p>

<pre class="Syntax">Value := <span class="func">读注册表</span>(<span class="optional">KeyName, ValueName</span>)
</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>KeyName</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>注册表键的全名.</p>
    <p>必须以 HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT 或 HKEY_CURRENT_CONFIG(或这些的缩写, 如 HKLM) 开始. 要访问<a href="LoopReg.htm#remote">远程注册表</a>, 请在前面加上计算机名和斜杠, 就像在本例中一样: \\workstation01\HKEY_LOCAL_MACHINE</p>
    <p>只有在<a href="LoopReg.htm">注册表循环</a>时, 才能省略 <em>KeyName</em>, 在这种情况下, 默认为当前循环项目的键. 如果项目是子键, 则默认使用该子键的全名. 如果项目是值, 则 <em>ValueName</em> 默认为该值的名称, 但是可以被重写.</p>
  </dd>

  <dt>ValueName</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>要检索的值的名称. 如果为空或省略, 将删除键的默认值(除了上面提到的). 默认值在  RegEdit 中显示为 "(默认)". 如果没有默认值(即注册表中显示 "数值未设置"), 则抛出一个异常.</p>
  </dd>

</dl>

<h2 id="Return_Value">返回值</h2>
<p>类型: <a href="../Concepts.htm#strings">字符串</a>或<a href="../Concepts.htm#numbers">整数</a></p>
<p>函数返回指定注册表键的值.</p>

<h2 id="Error_Handling">错误处理</h2>
<p>如果遇到问题(如不存在的键或值), 则抛出异常.</p>
<p><a href="../Variables.htm#LastError">内_错误代码</a> 被设置为操作系统 GetLastError() 函数返回的结果.</p>

<h2 id="Remarks">备注</h2>
<p>目前只支持以下值类型: REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD, and REG_BINARY.</p>
<p>REG_DWORD 值总是被转换为正十进制数. 如果数字是负数, 则使用 <code>OutputVar := OutputVar &lt;&lt; 32 &gt;&gt; 32</code> 或类似的方法将其转换为有符号的 32 位整数.</p>
<p>读取 REG_BINARY 键时, 结果是一串十六进制字符. 例如, REG_BINARY 值 01,a9,ff,77 的读取结果为字符串 01A9FF77.</p>
<p>读取 REG_MULTI_SZ 值的每个部分会以换行符结束(`n). 如果值为空, 则返回空字符串. 请参阅 <a href="FileSelect.htm">文件选择框</a> 中的示例了解如何从返回值中逐个提取单独的部分.</p>
<p>要检索和操作多个注册表键或值, 请考虑使用<a href="LoopReg.htm">注册表循环</a>.</p>
<p>有关如何访问远程计算机注册表的详情, 请参阅<a href="LoopReg.htm#remote">注册表循环</a>中的备注.</p>
<p>从 32 位脚本中读取或写入注册表的 64 位部分中的条目, 反之亦然, 请使用 <a href="SetRegView.htm">设置注册表视图</a>.</p>

<h2 id="Related">相关</h2>
<p><a href="RegDelete.htm">删除注册表项</a>, <a href="RegDeleteKey.htm">删除注册表键</a>, <a href="RegWrite.htm">写注册表</a>, <a href="LoopReg.htm">注册表循环</a>, <a href="SetRegView.htm">设置注册表视图</a>, <a href="IniRead.htm">读取配置</a></p>
<h2 id="Examples">示例</h2>

<div class="ex" id="ExProgramFiles">
<p><a href="#ExProgramFiles">#1</a>: 检索 Program Files(程序文件) 目录的路径.</p>
<pre><em>; 此行确保在 64 位系统上运行非 64 位脚本时
; 也能正常返回 64 位的 Program Files 目录路径.</em>
<a href="SetRegView.htm">设置注册表视图</a> 64

ProgramFilesDir := 读注册表("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")
信息框 "Program files are in: " ProgramFilesDir

<em>; 另一种返回 Program Files 目录路径的方法:</em>
ProgramFilesDir := 获取环境变量(<a href="../Variables.htm#Is64bitOS">内_是否64位系统</a> ? "ProgramW6432" : "ProgramFiles")
信息框 "Program files are in: " ProgramFilesDir
</pre>
</div>

<div class="ex" id="ExType">
<p><a href="#ExType">#2</a>:  下面的例子检索注册表值的类型(例如 REG_SZ 或 REG_DWORD).</p>
<pre>信息框 RegKeyType(&quot;HKCU&quot;, &quot;Environment&quot;, &quot;TEMP&quot;)
返回

RegKeyType(RootKey, SubKey, ValueName)  <em>; 此函数返回指定值的类型.</em>
{
    遍历注册表, RootKey "\" SubKey
        如果 (内_遍历注册表名 = ValueName)
            返回 内_遍历注册表类型
    返回 &quot;Error&quot;
}</pre>
</div>

</body>
</html>